package com.wei.czz.framework.admin.service;

import com.wei.czz.common.dto.admin.menu.MenuDto;
import com.wei.czz.common.tool.PageDto;
import com.wei.czz.common.vo.admin.menu.MenuFormVo;
import com.wei.czz.common.vo.admin.menu.MenuVo;
import com.wei.czz.framework.admin.entity.MenuEntity;

import java.util.List;
import java.util.Map;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wei
 * date: 2021-03-15 10:30:18
 * className: MenuService 系统菜单操作请求服务接口
 * version: 1.0
 * description:
 */
public interface MenuService {

    /**
     * 保存菜单操作
     * @param menu 菜单对象
     */
    void saveOrEdit(MenuEntity menu);

    /**
     * 批量保存菜单数据操作
     * @param menuList 菜单对象列表
     */
    void batchSaveMenu(List<MenuEntity> menuList);

    /**
     * 缓存菜单数据操作
     * @param menuIdList 菜单id列表
     */
    void cacheMenu(List<Long> menuIdList);

    /**
     * 缓存全部菜单信息操作
     */
    void cacheAllMenu();

    /**
     * 获取菜单数据操作
     * @param menuId 菜单主键
     * @return 菜单数据
     */
    MenuEntity getMenu(Long menuId);

    /**
     * 分页查询菜单数据列表操作
     * 分页查询一级菜单数据（每个一级菜单下包含自己的子菜单列表）
     * @param menuVo 菜单查询参数对象
     * @return 分页查询
     */
    PageDto<MenuEntity> getPageMenuList(MenuFormVo menuVo);

    /**
     * 分页查询菜单缓存列表操作
     * @param menuFormVo 菜单缓存查询参数对象
     * @return 操作结果
     */
    Map<String, Object> getCacheMenuList(MenuFormVo menuFormVo);

    /**
     * 获取菜单操作
     * @param idList 主键列表
     * @return 菜单对象列表
     */
    List<MenuEntity> getList(List<Long> idList);

    /**
     * 获取直接子菜单操作
     * @param parentIdList 父级菜单主键列表
     * @return 菜单对象列表
     */
    List<MenuEntity> findList(List<Long> parentIdList);

    /**
     * 获取用户关联菜单操作
     * @param userId 用户主键
     * @return 菜单对象列表
     */
    List<MenuEntity> findList(Long userId);

    /**
     * 获取菜单树操作
     * 1、获取所有菜单类型为“目录”或“菜单”的菜单数据，并构造成树形结构
     * 2、如果菜单主键和参数menuId一致，则不将该菜单加入菜单树中，同理其子菜单也不加入。
     * @param menuId 菜单主键
     * @return 菜单树数据
     */
    MenuDto getMenuTree(Long menuId);

    /**
     * 获取菜单操作
     * @param status 菜单状态
     * @return 菜单列表
     */
    List<MenuEntity> getMenuList(Integer status);

    /**
     * 获取子、子孙..菜单操作
     * @return 菜单列表
     */
    List<MenuEntity> getChildrenMenuList(String menuPath);

    /**
     * 获取菜单缓存信息操作
     * @param menuVo 菜单参数对象
     * @return 操作结果
     */
    Map<String, Object> getMenuOnCache(MenuVo menuVo);

    /**
     * 获取子菜单下一个默认排序等级操作
     * @param menuId 菜单主键
     * @return 下一个默认排序等级数值
     */
    Integer getNextSort(Long menuId);

    /**
     * 批量修改菜单操作
     * @param menuList 菜单对象列表
     */
    void batchUpdateMenu(List<MenuEntity> menuList);

    /**
     * 删除系统菜单操作
     * @param menuId 菜单id
     */
    void deleteMenu(Long menuId);

    /**
     * 删除菜单缓存操作
     * @param menuIds 菜单id数组
     */
    void deleteMenuOnCache(String[] menuIds);

    /**
     * 清空菜单缓存信息操作
     */
    void clearMenuOnCache();

}

